SQLAlchemyã®ãã€ããªããããããã£ããã¹ã¿ãŒããŠããã衚çŸåè±ãã§ä¿å®ããããããŒã¿ã¢ãã«ã®ããã®èšç®å±æ§ãäœæããŸããå®è·µçãªäŸã§åŠã³ãŸãã
Python SQLAlchemy ãã€ããªããããããã£ïŒåŒ·åãªããŒã¿ã¢ããªã³ã°ã®ããã®èšç®å±æ§
SQLAlchemyã¯ã匷åã§æè»ãªPython SQLããŒã«ãããã§ããããªããžã§ã¯ãã»ãªã¬ãŒã·ã§ãã«ããããŒïŒORMïŒã§ãããããŒã¿ããŒã¹ãšã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ããã®è±å¯ãªæ©èœãæäŸããŸããäžã§ãããã€ããªããããããã£ã¯ãããŒã¿ã¢ãã«å ã§èšç®å±æ§ãäœæããããã®ç¹ã«äŸ¿å©ãªããŒã«ãšããŠéç«ã£ãŠããŸãããã®èšäºã§ã¯ãSQLAlchemyãã€ããªããããããã£ãçè§£ãæŽ»çšããããã®å æ¬çãªã¬ã€ããæäŸãããã衚çŸåè±ãã§ãä¿å®ãããããå¹ççãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããããã«ããŸãã
SQLAlchemyãã€ããªããããããã£ãšã¯ïŒ
ãã€ããªããããããã£ã¯ãååã瀺ãããã«ãSQLAlchemyã®ç¹å¥ãªã¿ã€ãã®ããããã£ã§ãããã¢ã¯ã»ã¹ãããã³ã³ããã¹ãã«å¿ããŠç°ãªãåäœãããŸããããã«ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§çŽæ¥ã¢ã¯ã»ã¹ã§ãã屿§ïŒéåžžã®ããããã£ã®ããã«ïŒãŸãã¯SQLåŒã§äœ¿çšã§ãã屿§ïŒã«ã©ã ã®ããã«ïŒãå®çŸ©ã§ããŸããããã¯ãã€ã³ã¹ã¿ã³ã¹ã¬ãã«ãšã¯ã©ã¹ã¬ãã«ã®äž¡æ¹ã®ã¢ã¯ã»ã¹ã«å¯ŸããŠåå¥ã®é¢æ°ãå®çŸ©ããããšã«ãã£ãŠå®çŸãããŸãã
æ¬è³ªçã«ããã€ããªããããããã£ã¯ãã¢ãã«ã®ä»ã®å±æ§ããæŽŸçããèšç®å±æ§ãå®çŸ©ããæ¹æ³ãæäŸããŸãããããã®èšç®å±æ§ã¯ã¯ãšãªã§äœ¿çšã§ããã¢ãã«ã®ã€ã³ã¹ã¿ã³ã¹ã§çŽæ¥ã¢ã¯ã»ã¹ããããšãã§ããäžè²«æ§ãããçŽæçãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã
ãã€ããªããããããã£ã䜿çšããçç±ïŒ
ãã€ããªããããããã£ã䜿çšãããšãããã€ãã®å©ç¹ããããŸãã
- 衚çŸåïŒè€éãªé¢ä¿ãèšç®ãã¢ãã«å ã§çŽæ¥è¡šçŸã§ãããããã³ãŒããããèªã¿ãããçè§£ãããããªããŸãã
- ä¿å®æ§ïŒè€éãªããžãã¯ããã€ããªããããããã£å ã«ã«ãã»ã«åããããšã§ãã³ãŒãã®éè€ãæžãããã¢ããªã±ãŒã·ã§ã³ã®ä¿å®æ§ãåäžãããŸãã
- å¹çïŒãã€ããªããããããã£ã䜿çšãããšãããŒã¿ããŒã¹ã§çŽæ¥èšç®ãå®è¡ã§ãããããã¢ããªã±ãŒã·ã§ã³ãšããŒã¿ããŒã¹ãµãŒããŒéã§è»¢éããå¿ èŠã®ããããŒã¿éãåæžã§ããŸãã
- äžè²«æ§ïŒã¢ãã«ã®ã€ã³ã¹ã¿ã³ã¹ãæäœããŠããããSQLã¯ãšãªãäœæããŠãããã«é¢ä¿ãªããèšç®å±æ§ã«ã¢ã¯ã»ã¹ããããã®äžè²«ããã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã
åºæ¬çãªäŸïŒãã«ããŒã
ç°¡åãªäŸããå§ããŸããããåãšå§ãã人ã®ãã«ããŒã ãèšç®ããŸãã
ã¢ãã«ã®å®çŸ©
ãŸãã`first_name`ãš`last_name`ã«ã©ã ãæã€åçŽãª`Person`ã¢ãã«ãå®çŸ©ããŸãã
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.hybrid import hybrid_property
Base = declarative_base()
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
def __repr__(self):
return f""
engine = create_engine('sqlite:///:memory:') # äŸã®ããã®ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
ãã€ããªããããããã£ã®äœæ
次ã«ãåãšå§ãé£çµãã`full_name`ãã€ããªããããããã£ã远å ããŸãã
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
@hybrid_property
def full_name(self):
return f"{self.first_name} {self.last_name}"
def __repr__(self):
return f""
ãã®äŸã§ã¯ã`@hybrid_property`ãã³ã¬ãŒã¿ã¯`full_name`ã¡ãœããããã€ããªããããããã£ã«å€æããŸãã`person.full_name`ã«ã¢ã¯ã»ã¹ãããšããã®ã¡ãœããå ã®ã³ãŒããå®è¡ãããŸãã
ãã€ããªããããããã£ãžã®ã¢ã¯ã»ã¹
ããã€ãã®ããŒã¿ãäœæãã`full_name`ããããã£ã«ã¢ã¯ã»ã¹ããæ¹æ³ãèŠãŠã¿ãŸãããã
person1 = Person(first_name='Alice', last_name='Smith')
person2 = Person(first_name='Bob', last_name='Johnson')
session.add_all([person1, person2])
session.commit()
print(person1.full_name) # åºåïŒAlice Smith
print(person2.full_name) # åºåïŒBob Johnson
ã¯ãšãªã§ã®ãã€ããªããããããã£ã®äœ¿çš
ãã€ããªããããããã£ã®çã®åã¯ãã¯ãšãªã§äœ¿çšãããšãã«çºæ®ãããŸãã`full_name`ã«åºã¥ããŠãéåžžã®ã«ã©ã ã§ãããã®ããã«ãã£ã«ã¿ãªã³ã°ã§ããŸãã
people_with_smith = session.query(Person).filter(Person.full_name == 'Alice Smith').all()
print(people_with_smith) # åºåïŒ[]
ãã ããäžèšã®äŸã¯ãåçŽãªç䟡æ§ãã§ãã¯ã§ã®ã¿æ©èœããŸããã¯ãšãªã§ã®ããè€éãªæäœïŒ`LIKE`ãªã©ïŒã§ã¯ãåŒé¢æ°ãå®çŸ©ããå¿ èŠããããŸãã
åŒé¢æ°ã®å®çŸ©
ãã€ããªããããããã£ãããè€éãªSQLåŒã§äœ¿çšããã«ã¯ãåŒé¢æ°ãå®çŸ©ããå¿ èŠããããŸãããã®é¢æ°ã¯ããã€ããªããããããã£ãSQLåŒã«å€æããæ¹æ³ãSQLAlchemyã«äŒããŸãã
åã®äŸã倿ŽããŠã`full_name`ããããã£ã§`LIKE`ã¯ãšãªããµããŒãããŸãã
from sqlalchemy import func
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
@hybrid_property
def full_name(self):
return f"{self.first_name} {self.last_name}"
@full_name.expression
def full_name(cls):
return func.concat(cls.first_name, ' ', cls.last_name)
def __repr__(self):
return f""
ããã§ã¯ã`@full_name.expression`ãã³ã¬ãŒã¿ã远å ããŸãããããã¯ãã¯ã©ã¹ïŒ`cls`ïŒãåŒæ°ãšããŠåãåãã`func.concat`颿°ã䜿çšããŠåãšå§ãé£çµããSQLåŒãè¿ã颿°ãå®çŸ©ããŸãã`func.concat`ã¯ãããŒã¿ããŒã¹ã®é£çµé¢æ°ïŒããšãã°ãSQLiteã®`||`ãMySQLããã³PostgreSQLã®`CONCAT`ïŒã衚ãSQLAlchemy颿°ã§ãã
ããã§ã`LIKE`ã¯ãšãªã䜿çšã§ããŸãã
people_with_smith = session.query(Person).filter(Person.full_name.like('%Smith%')).all()
print(people_with_smith) # åºåïŒ[]
å€ã®èšå®ïŒã»ãã¿ãŒ
ãã€ããªããããããã£ã«ã¯ã»ãã¿ãŒãå«ããããšãã§ããæ°ããå€ã«åºã¥ããŠåºã«ãªã屿§ãæŽæ°ã§ããŸããããã¯ã`@full_name.setter`ãã³ã¬ãŒã¿ã䜿çšããŠè¡ãããŸãã
ãã«ããŒã ãåãšå§ã«åå²ããã»ãã¿ãŒã`full_name`ããããã£ã«è¿œå ããŸãããã
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
@hybrid_property
def full_name(self):
return f"{self.first_name} {self.last_name}"
@full_name.expression
def full_name(cls):
return func.concat(cls.first_name, ' ', cls.last_name)
@full_name.setter
def full_name(self, full_name):
parts = full_name.split()
self.first_name = parts[0]
self.last_name = ' '.join(parts[1:]) if len(parts) > 1 else ''
def __repr__(self):
return f""
ããã§ã`full_name`ããããã£ãèšå®ããŠã`first_name`ãš`last_name`屿§ãæŽæ°ã§ããŸãã
person = Person(first_name='Alice', last_name='Smith')
session.add(person)
session.commit()
person.full_name = 'Charlie Brown'
print(person.first_name) # åºåïŒCharlie
print(person.last_name) # åºåïŒBrown
session.commit()
ããªãŒã¿ãŒ
ã»ãã¿ãŒãšåæ§ã«ã`@full_name.deleter`ãã³ã¬ãŒã¿ã䜿çšããŠããã€ããªããããããã£ã®ããªãŒã¿ãŒãå®çŸ©ããããšãã§ããŸããããã«ããã`del person.full_name`ã詊è¡ãããšãã«äœãèµ·ããããå®çŸ©ã§ããŸãã
äŸãšããŠããã«ããŒã ãåé€ãããšãåãšå§ã®äž¡æ¹ãã¯ãªã¢ãããããã«ããŸãããã
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
@hybrid_property
def full_name(self):
return f"{self.first_name} {self.last_name}"
@full_name.expression
def full_name(cls):
return func.concat(cls.first_name, ' ', cls.last_name)
@full_name.setter
def full_name(self, full_name):
parts = full_name.split()
self.first_name = parts[0]
self.last_name = ' '.join(parts[1:]) if len(parts) > 1 else ''
@full_name.deleter
def full_name(self):
self.first_name = None
self.last_name = None
def __repr__(self):
return f""
person = Person(first_name='Charlie', last_name='Brown')
session.add(person)
session.commit()
del person.full_name
print(person.first_name) # åºåïŒNone
print(person.last_name) # åºåïŒNone
session.commit()
é«åºŠãªäŸïŒçå¹Žææ¥ãã幎霢ãèšç®ãã
ããè€éãªäŸãèããŠã¿ãŸããããçå¹Žææ¥ãã人ã®å¹Žéœ¢ãèšç®ããŸããããã¯ãæ¥ä»ãåŠçããŠèšç®ãå®è¡ãããã€ããªããããããã£ã®èœåã瀺ããŠããŸãã
çå¹Žææ¥ã«ã©ã ã®è¿œå
ãŸãã`date_of_birth`ã«ã©ã ã`Person`ã¢ãã«ã«è¿œå ããŸãã
from sqlalchemy import Date
import datetime
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
date_of_birth = Column(Date)
# ... (åã®ã³ãŒã)
ãã€ããªããããããã£ã§å¹Žéœ¢ãèšç®ãã
次ã«ã`age`ãã€ããªããããããã£ãäœæããŸãããã®ããããã£ã¯ã`date_of_birth`ã«ã©ã ã«åºã¥ããŠå¹Žéœ¢ãèšç®ããŸãã`date_of_birth`ã`None`ã®å ŽåãåŠçããå¿ èŠããããŸãã
from sqlalchemy import Date
import datetime
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
date_of_birth = Column(Date)
@hybrid_property
def age(self):
if self.date_of_birth:
today = datetime.date.today()
age = today.year - self.date_of_birth.year - ((today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day))
return age
return None # ãŸãã¯å¥ã®ããã©ã«ãå€
@age.expression
def age(cls):
today = datetime.date.today()
return func.cast(func.strftime('%Y', 'now') - func.strftime('%Y', cls.date_of_birth) - (func.strftime('%m-%d', 'now') < func.strftime('%m-%d', cls.date_of_birth)), Integer)
# ... (åã®ã³ãŒã)
éèŠãªèæ ®äºé ïŒ
- ããŒã¿ããŒã¹åºæã®æ¥ä»é¢æ°ïŒåŒé¢æ°ã¯ãæ¥ä»èšç®ã«`func.strftime`ã䜿çšããŸãããã®é¢æ°ã¯SQLiteã«åºæã§ããä»ã®ããŒã¿ããŒã¹ïŒPostgreSQLãMySQLãªã©ïŒã§ã¯ãé©åãªããŒã¿ããŒã¹åºæã®æ¥ä»é¢æ°ïŒPostgreSQLã®`EXTRACT`ãMySQLã®`YEAR`ã`MAKEDATE`ãªã©ïŒã䜿çšããå¿ èŠããããŸãã
- åãã£ã¹ãïŒ`func.cast`ã䜿çšããŠãæ¥ä»èšç®ã®çµæãæŽæ°ã«ãã£ã¹ãããŸããããã«ããã`age`ããããã£ãæŽæ°å€ãè¿ãããšãä¿èšŒãããŸãã
- ã¿ã€ã ãŸãŒã³ïŒæ¥ä»ãæ±ãå Žåã¯ãã¿ã€ã ãŸãŒã³ã«æ³šæããŠãã ãããæ¥ä»ãäžè²«ããã¿ã€ã ãŸãŒã³ã§ä¿åããã³æ¯èŒãããŠããããšã確èªããŠãã ããã
- `None`å€ã®åŠç ããããã£ã¯ããšã©ãŒãé²ãããã«`date_of_birth`ã`None`ã®å ŽåãåŠçããå¿ èŠããããŸãã
幎霢ããããã£ã®äœ¿çš
person1 = Person(first_name='Alice', last_name='Smith', date_of_birth=datetime.date(1990, 1, 1))
person2 = Person(first_name='Bob', last_name='Johnson', date_of_birth=datetime.date(1985, 5, 10))
session.add_all([person1, person2])
session.commit()
print(person1.age) # åºåïŒïŒçŸåšã®æ¥ä»ãšçå¹Žææ¥ã«ããïŒ
print(person2.age) # åºåïŒïŒçŸåšã®æ¥ä»ãšçå¹Žææ¥ã«ããïŒ
people_over_30 = session.query(Person).filter(Person.age > 30).all()
print(people_over_30) # åºåïŒïŒçŸåšã®æ¥ä»ã«åºã¥ããŠ30æ³ä»¥äžã®äººïŒ
ããè€éãªäŸãšãŠãŒã¹ã±ãŒã¹
Eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã§ã®æ³šæåèšã®èšç®
Eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã`OrderItem`ã¢ãã«ãšã®é¢ä¿ãæã€`Order`ã¢ãã«ãããå ŽåããããŸãããã€ããªããããããã£ã䜿çšããŠã泚æã®åèšå€ãèšç®ã§ããŸãã
from sqlalchemy import ForeignKey, Float
from sqlalchemy.orm import relationship
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
items = relationship("OrderItem", back_populates="order")
@hybrid_property
def total(self):
return sum(item.price * item.quantity for item in self.items)
@total.expression
def total(cls):
return session.query(func.sum(OrderItem.price * OrderItem.quantity)).\
filter(OrderItem.order_id == cls.id).scalar_subquery()
class OrderItem(Base):
__tablename__ = 'order_items'
id = Column(Integer, primary_key=True)
order_id = Column(Integer, ForeignKey('orders.id'))
order = relationship("Order", back_populates="items")
price = Column(Float)
quantity = Column(Integer)
ãã®äŸã§ã¯ããµãã¯ãšãªã䜿çšããŠããŒã¿ããŒã¹ã§çŽæ¥åèšãèšç®ãããããè€éãªåŒé¢æ°ã瀺ããŠããŸãã
å°çèšç®
å°çããŒã¿ãæ±ã£ãŠããå Žåã¯ããã€ããªããããããã£ã䜿çšããŠããã€ã³ãéã®è·é¢ãèšç®ãããããã€ã³ããç¹å®ã®å°åå ã«ãããã©ããã倿ãããã§ããŸããããã«ã¯ãããŒã¿ããŒã¹åºæã®å°ç颿°ïŒPostgreSQLã®PostGIS颿°ãªã©ïŒã䜿çšããããšããããããŸãã
from geoalchemy2 import Geometry
from sqlalchemy import cast
class Location(Base):
__tablename__ = 'locations'
id = Column(Integer, primary_key=True)
name = Column(String)
coordinates = Column(Geometry(geometry_type='POINT', srid=4326))
@hybrid_property
def latitude(self):
if self.coordinates:
return self.coordinates.x
return None
@latitude.expression
def latitude(cls):
return cast(func.ST_X(cls.coordinates), Float)
@hybrid_property
def longitude(self):
if self.coordinates:
return self.coordinates.y
return None
@longitude.expression
def longitude(cls):
return cast(func.ST_Y(cls.coordinates), Float)
ãã®äŸã§ã¯ã`geoalchemy2`æ¡åŒµæ©èœãå¿ èŠã§ãããPostGISãæå¹ã«ãªã£ãŠããããŒã¿ããŒã¹ã䜿çšããŠããããšãåæãšããŠããŸãã
ãã€ããªããããããã£ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- ã·ã³ãã«ã«ä¿ã€ïŒæ¯èŒçåçŽãªèšç®ã«ã¯ãã€ããªããããããã£ã䜿çšããŸããããè€éãªããžãã¯ã«ã¯ãåå¥ã®é¢æ°ãŸãã¯ã¡ãœããã䜿çšããããšãæ€èšããŠãã ããã
- é©åãªããŒã¿åã䜿çšããïŒãã€ããªããããããã£ã§äœ¿çšãããããŒã¿åããPythonãšSQLã®äž¡æ¹ãšäºææ§ãããããšã確èªããŠãã ããã
- ããã©ãŒãã³ã¹ãèæ ®ããïŒãã€ããªããããããã£ã¯ãããŒã¿ããŒã¹ã§èšç®ãå®è¡ããããšã§ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããã¯ãšãªã®ããã©ãŒãã³ã¹ãç£èŠããå¿ èŠã«å¿ããŠæé©åããããšãéèŠã§ãã
- 培åºçã«ãã¹ãããïŒãã€ããªããããããã£ã培åºçã«ãã¹ãããŠããã¹ãŠã®ã³ã³ããã¹ãã§æ£ããçµæãåŸãããããšã確èªããŠãã ããã
- ã³ãŒããããã¥ã¡ã³ãåããïŒãã€ããªããããããã£ãäœãããã®ããã©ã®ããã«æ©èœããã®ãã説æããããã«ãæç¢ºã«ããã¥ã¡ã³ãåããŠãã ããã
äžè¬çãªèœãšã穎ãšãã®åé¿æ¹æ³
- ããŒã¿ããŒã¹åºæã®é¢æ°ïŒåŒé¢æ°ãããŒã¿ããŒã¹ã«äŸåããªã颿°ã䜿çšããããããŒã¿ããŒã¹åºæã®å®è£ ãæäŸããŠãäºææ§ã®åé¡ãåé¿ããŠãã ããã
- 誀ã£ãåŒé¢æ°ïŒåŒé¢æ°ããã€ããªããããããã£ãæå¹ãªSQLåŒã«æ£ãã倿ããŠããããšãå確èªããŠãã ããã
- ããã©ãŒãã³ã¹ã®ããã«ããã¯ïŒè€éãããããŸãã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããèšç®ã«ãã€ããªããããããã£ã䜿çšããããšã¯é¿ããŠãã ãããããã¯ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸãã
- ååã®ç«¶åïŒãã€ããªããããããã£ãšã¢ãã«ã®ã«ã©ã ã«åãååã䜿çšããããšã¯é¿ããŠãã ãããããã¯æ··ä¹±ããšã©ãŒã«ã€ãªããå¯èœæ§ããããŸãã
åœéåã«é¢ããèæ ®äºé
åœéåãããã¢ããªã±ãŒã·ã§ã³ã§ãã€ããªããããããã£ã䜿çšããå Žåã¯ã次ã®ç¹ãèæ ®ããŠãã ããã
- æ¥ä»ãšæå»ã®åœ¢åŒïŒããŸããŸãªãã±ãŒã«ã«é©åãªæ¥ä»ãšæå»ã®åœ¢åŒã䜿çšããŠãã ããã
- æ°å€åœ¢åŒïŒ10鲿°åºåãèšå·ãæ¡åºåãèšå·ãªã©ãããŸããŸãªãã±ãŒã«ã«é©åãªæ°å€åœ¢åŒã䜿çšããŠãã ããã
- é貚圢åŒïŒé貚èšå·ãå°æ°ç¹ä»¥äžæ¡æ°ãªã©ãããŸããŸãªãã±ãŒã«ã«é©åãªé貚圢åŒã䜿çšããŠãã ããã
- æååã®æ¯èŒïŒãã±ãŒã«å¯Ÿå¿ã®æå忝èŒé¢æ°ã䜿çšããŠãæååãããŸããŸãªèšèªã§æ£ããæ¯èŒãããããã«ããŠãã ããã
ããšãã°ã幎霢ãèšç®ãããšãã¯ãäžçäžã§äœ¿çšãããŠããããŸããŸãªæ¥ä»åœ¢åŒãèæ ®ããŠãã ãããäžéšã®å°åã§ã¯ãæ¥ä»ã¯`MM/DD/YYYY`ãšããŠèšè¿°ãããä»ã®å°åã§ã¯`DD/MM/YYYY`ãŸãã¯`YYYY-MM-DD`ãšããŠèšè¿°ãããŸããã³ãŒãããã¹ãŠã®åœ¢åŒã§æ¥ä»ãæ£ããè§£æããããšã確èªããŠãã ããã
æååãé£çµããå ŽåïŒ`full_name`ã®äŸãªã©ïŒãååã®é åºä»ãã«ãããæåçãªéãã«æ³šæããŠãã ãããäžéšã®æåã§ã¯ãå§ãåã®åã«æ¥ãŸãããŠãŒã¶ãŒãååã®è¡šç€ºåœ¢åŒãã«ã¹ã¿ãã€ãºããããã®ãªãã·ã§ã³ãæäŸããããšãæ€èšããŠãã ããã
çµè«
SQLAlchemyãã€ããªããããããã£ã¯ãããŒã¿ã¢ãã«å ã§èšç®å±æ§ãäœæããããã®åŒ·åãªããŒã«ã§ããããã«ãããè€éãªé¢ä¿ãèšç®ãã¢ãã«ã§çŽæ¥è¡šçŸã§ãããããã³ãŒãã®å¯èªæ§ãä¿å®æ§ãå¹çãåäžããŸãããã€ããªããããããã£ãåŒé¢æ°ãã»ãã¿ãŒãããªãŒã¿ãŒãå®çŸ©ããæ¹æ³ãçè§£ããããšã§ããã®æ©èœã掻çšããŠãããæŽç·Žãããå ç¢ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
ãã®èšäºã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸããäžè¬çãªèœãšã穎ãåé¿ããããšã§ããã€ããªããããããã£ã广çã«å©çšããŠSQLAlchemyã¢ãã«ã匷åããããŒã¿ã¢ã¯ã»ã¹ããžãã¯ãç°¡çŽ åã§ããŸããã¢ããªã±ãŒã·ã§ã³ãäžçäžã®ãŠãŒã¶ãŒã«å¯ŸããŠæ£ããæ©èœããããã«ãåœéåã®åŽé¢ãèæ ®ããããšãå¿ããªãã§ãã ãããæ éãªèšç»ãšå®è£ ã«ããããã€ããªããããããã£ã¯SQLAlchemyããŒã«ãããã®äžå¯æ¬ ãªéšåã«ãªãå¯èœæ§ããããŸãã